// Copyright Epic Games, Inc. All Rights Reserved.

#pragma once

#include "AbilitySystemComponent.h"
#include "LyraAttributeSet.h"

#include "LyraCombatSet.generated.h"

class UObject;
struct FFrame;

/**
 * ULyraCombatSet
 *
 *  定义用于施加伤害或治疗所需属性的类。
 *  属性示例包括：伤害、治疗、攻击力和护盾穿透。
 */
UCLASS(BlueprintType)
class ULyraCombatSet : public ULyraAttributeSet
{
	GENERATED_BODY()

public:

	ULyraCombatSet();

	ATTRIBUTE_ACCESSORS(ULyraCombatSet, BaseDamage); // 为 BaseDamage 属性生成通用的获取和设置函数
	ATTRIBUTE_ACCESSORS(ULyraCombatSet, BaseHeal); // 为 BaseHeal 属性生成通用的获取和设置函数

protected:

	/**
	 * 当 BaseDamage 属性在客户端上从服务器复制更新时调用的函数
	 * @param OldValue 复制前的旧值
	 */
	UFUNCTION()
	void OnRep_BaseDamage(const FGameplayAttributeData& OldValue);

	/**
	 * 当 BaseHeal 属性在客户端上从服务器复制更新时调用的函数
	 * @param OldValue 复制前的旧值
	 */
	UFUNCTION()
	void OnRep_BaseHeal(const FGameplayAttributeData& OldValue);

private:

	// 在伤害计算执行中应用的基础伤害量。
	UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_BaseDamage, Category = "Lyra|Combat", Meta = (AllowPrivateAccess = true))
	FGameplayAttributeData BaseDamage;

	// 在治疗计算执行中应用的基础治疗量。
	UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_BaseHeal, Category = "Lyra|Combat", Meta = (AllowPrivateAccess = true))
	FGameplayAttributeData BaseHeal;
};